package agenda.scheduling;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import agenda.database.entities.Trabalho;
import agenda.extra.Utils;

public class Interval {
	
	private GregorianCalendar beginning=null;
	private GregorianCalendar end=null;
	
	private Trabalho trabalho=null;
	
	public Interval(Trabalho trabalho)
	{
		super();
		this.trabalho = trabalho;
	}
	
	public Interval(GregorianCalendar beginning, GregorianCalendar end, Trabalho trabalho)
	{
		super();
		clearDate(beginning);
		clearDate(end);
		this.beginning = beginning;
		this.end = end;
		this.trabalho = trabalho;
	}

	public GregorianCalendar getbeginning()
	{
		return beginning;
	}
	
	public void setbeginning(GregorianCalendar beginning)
	{
		clearDate(beginning);
		this.beginning = beginning;
	}
	
	public GregorianCalendar getend()
	{
		return end;
	}
	
	public void setend(GregorianCalendar end)
	{
		clearDate(end);
		this.end = end;
	}
	
	public void setTrabalho(Trabalho trabalho)
	{
		this.trabalho = trabalho;
	}

	public Trabalho getTrabalho()
	{
		return trabalho;
	}
	
	static public GregorianCalendar clearDate(GregorianCalendar date)
	{
		date.set(Calendar.HOUR_OF_DAY, 0);
		date.set(Calendar.MINUTE, 0);
		date.set(Calendar.SECOND, 0);
		date.set(Calendar.MILLISECOND, 0);
		
		return date;
	}
	
	public boolean contains(Date _date)
	{
			if (_date.compareTo(beginning.getTime()) >= 0 && _date.compareTo(end.getTime()) <= 0)
				return true;


		return false;
	}

	public boolean overlaps(Interval _di)
	{
		if( _di.getStartAsDate().compareTo(end.getTime())>=0)
			return false;
		
		if (contains(_di.getStartAsDate()) || contains(_di.getEndAsDate()) || _di.contains(getStartAsDate()) || _di.contains(getEndAsDate()))
			return true;

		return false;
	}
	
	public Date getStartAsDate()
	{
		return beginning.getTime();
	}

	public Date getEndAsDate()
	{
		return end.getTime();
	}

	@Override
	public String toString() {
		if(getbeginning()!=null && getend()!=null)
			return "" + getTrabalho().getCourse() + ": " + 
					Utils.dateToString(getStartAsDate()) + " - " +
					Utils.dateToString(getEndAsDate());
		return "" + getTrabalho().getCourse() + " - " +
				getTrabalho().getDeliverDateAsString();
	}
	
	

}
